- 서버리스란
- 서버를 관리할 필요가 없는 애플리케이션을 구축해서 실행
- 서버 관리, 운영에 대한 소요 없음
- 대상
- 개발자
- 서버리스 플랫폼 제공자
- 클라우드 벤더 혹은 사내 개발자를 위해 서버 제공
- 서버리스 아키텍처
- 기존 아키텍처
- 서버리스 아키텍처
- 애플리케이션 서버에서 인증 부분을 빼고 범용적인 외부 서비스 사용
- 클라이언트가 일부 디비에 직접 접속하는 것을 허용
- 앱 서버 로직이 클라이언트에서 실행됨
- 무거운 처리는 서버가 하지만 항상 가동 상태에서 하는 것이 아니라 특정 조건에서
- 이벤트 단위로 실행
- 기존 아키텍처에서 앱 서버의 역할은 요청과 응답 주기를 제어하는 것
- 그러나 서버리스에서는 클라이언트가 담당
- 비즈니스 로직만을 실행하면 됨
- 핵심
- 외부 서비스 이용
- BaaS
- Backend as a Service
- 앱의 핵심 기능을 외부 API 서비스로 교체
- 비즈니스 로직을 이벤트 주도 서비스로 구현
- Funtion as a Service
- 이벤트 주도 컴퓨팅 제공
- AWS 람다가 이에 해당
- 대중적인 의미의 서버리스
- 아키텍처 일반화
- 이벤트 소스
- 하나 또는 그 이상의 인스턴스에 대해 이벤트를 트리거, 스트리밍
- 함수 인스턴스
- FaaS 컨트롤러
- 플랫폼 서비스
- 사용 예시
- 요건
- 비동기, 병행, 독립된 작업 단위로 병렬화하기 쉬운 작업
- 요구 빈도가 낮으면서 산발적인 작업
- 확장 요건의 범위가 넓고 예측 불가능한 작업
- 스테이트리스하고 생명 주기가 짧은 작업
- 비즈니스 요건이 빈번하게 변화하고 개발도 그에 맞추어 빠르게 진행해야 하는 작업
- 멀티미디어 처리
- 데이터베이스 변경 관련 트리거
- IoT 센서의 메시지
- 대규모 스트림 처리
- 비트랜잭션형, 비요청/응답형
- 무한한 메시지 스트림 내에서 데이터 처리 시
- 배치 잡 및 스케줄 태스크
- 비동기적으로 정기적으로 높은 병렬 계산 등의 동작 수행
- HTTP REST API와 웹 어플리케이션
- CICD 파이프라인
- CI에서 사용
- 기존 CI는 잡을 디스패치하기 위해 대기하는 노드 풀 존재
- 이벤트가 발생할 때만 리소스를 사용하기에 비용 및 병목 현상 절감
- 장점
- 비용 절감
- BaaS
- 앱 컴포넌트의 상품화
- 다양한 기능들을 합치는 것이 가능해짐
- FaaS
- IaaS는 사용한 만큼 과금이나, 비즈니스 로직을 처리하지 않는 동안에도 실행됨
- 적절한 시간에만 실행되고 과금되므로 비용 절약적
- 처리 시간의 비효율이 과금으로 이뤄지기에 최적화에 집중하게 됨
- 쉬운 유지 관리
- 함수 배포 이후에는 설정 변경 없이 리소스 자동 확장
- 보안도 신경 쓸 필요 없음
- 제약
- 고유 제약
- 상태 관리의 번잡함
- stateless 하기에 사용 데이터를 저장할 대책 필요
- 상태 관리 시 BaaS 컴포넌트 사용해야 함
- 마이그레이션 시 이러한 특성을 고려하여 재설계 필요
- 지연 시간 발생
- BaaS 사용 시 해당 BaaS의 네트워크 프로토콜에 의존
- 지연 시간이 발생해도 대응 불가
- 로컬 테스트의 어려움
- 함수 기반의 단위 테스트는 가능
- 그 정도 테스트가 한계
- 현재 구현에 의한 제약
- 콜드 스타트
- 실시간 처리가 요구되는 환경에서 지연 시간 발생 가능성
- 툴이나 실행 환경 제약
- 패키징, 이미지화를 통한 통합 배포 불가
- 제한적인 리소스 때문에 재설계하는 경우 많음
- 재사용성 떨어짐
- 벤더 종속
- 클라우드 업체마다 방식이 다르고, 표준이 없어 종속됨